#pragma once
#include "logger.hpp"
#include <cstdarg>
#include <cstdlib>
//向用户提供简单操作
//用户添加这一个头文件也就够了


//提供全局接口以及宏函数，对日志系统接口进行使用便捷性优化




// 3 提供宏函数，直接标准输出打印（不用获取日志器-通过默认日志器）

namespace nhylog
{
    // 1 获取指定日志器的全局接口（避免用户自己操作单例对象）
    Logger::ptr getLogger(const std::string& name)
    {
        return nhylog::LoggerManager::getInstance().getLogger(name);
    }

    Logger::ptr rootLogger()
    {
        return nhylog::LoggerManager::getInstance().rootLogger();
    }

    // 2 使用宏函数，对日志器接口进行代理（代理模式）
    #define debug(fmt,...) debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define info(fmt,...) info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define warn(fmt,...) warn(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define error(fmt,...) error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define fatal(fmt,...) fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)

    // 3 提供宏函数，直接标准输出打印（不用获取日志器-通过默认日志器）
    // 饶
    // #define DEBUG(logger,fmt,...) logger->debug(fmt,##__VA_ARGS__)
    // #define DLOG(fmt,...) DEBUG(rootLogger(),fmt,##VA_ARGS__)

    #define DEBUG(fmt,...) nhylog::rootLogger()->debug(fmt,##__VA_ARGS__)
    #define INFO(fmt,...) nhylog::rootLogger()->info(fmt,##__VA_ARGS__)
    #define WARN(fmt,...) nhylog::rootLogger()->warn(fmt,##__VA_ARGS__)
    #define ERROR(fmt,...) nhylog::rootLogger()->error(fmt,##__VA_ARGS__)
    #define FATAL(fmt,...) nhylog::rootLogger()->fatal(fmt,##__VA_ARGS__)

}